#ifndef _LOG_
#define _LOG_

#include <time.h>
#include <iostream>
#include <stdarg.h>
#include <cstring>
#include <cstdio>

#define DEBUG 0
#define NORMAL 1
#define WARNING 2
#define ERROR 3
#define FATAL 4


const char* levels[] = {
    "DEBUG",
    "NORMAL",   // 正常的
    "WARNING",  // 警告
    "ERROR",  // 错误但不致命
    "FATAL"     // 致命的错误
};
const char* logPath = "./thisMy.log";

// class myFile
// {
// public:
//     myFile()
//     {
//         fp = fopen(logPath, "a");  // 追加的形式打开
//     }

//     ~myFile()
//     {
//         fclose(fp);
//     }
//     FILE* fp;
// };
// myFile mf;

// 日志包含的必要元素：错误等级 时间 支持用户自定义等...
static void logMessage(int level, const char* format, ...)  // 可变参数
{
#ifndef _DEBUG_
    if (level == DEBUG) return;
#endif

    char headar[1024];
    time_t timeStamp = time(nullptr);// 获取时间戳 默认时区
    struct tm* tm = localtime(&timeStamp);  // 获取相关结构体
    char* timeString = asctime(tm);
    timeString[strlen(timeString) - 1] = '\0';
    snprintf(headar, sizeof headar, "[%s] [%s]", levels[level], timeString);
    // std::cout << timeString << std::endl;

    char endar[1024];
    va_list ap;
    va_start(ap, format);
    vsprintf(endar, format, ap);  // 自定义内容于格式化于endar
    va_end(ap);
#ifdef MYFILE
    FILE* fp = fopen(logPath, "a");
    fprintf(fp, "%s:%s\n", headar, endar);
    fclose(fp);
#else
    printf("%s:%s\n", headar, endar);
#endif
}
#endif
